    /*
    * To change this template, choose Tools | Templates
    * and open the template in the editor.
    */
    package miage.ecom.commandes;

import java.io.PrintStream;
import java.util.List;
import java.util.StringTokenizer;
import miage.beans.ProduitPresentation;
import miage.ecom.Main.Shell;
import miage.ecom.Shell.ShellContext;
import miage.ecom.exceptions.BadFormateException;
import miage.ecom.exceptions.NumberAttributeException;
import miage.sessions.ecom.remote.EcomCustomerRemote;

    /**
    *
    * @author User
    */
    public class CartCommandImpl implements ShellCommand{
    private ShellContext _context = null;
    public CartCommandImpl(ShellContext context)
    {
    _context = context;
    }
    /**
    * renvoie le nom de la commande
    * @return
    */
    @Override
    public String getName()
    {
    String langue = (String) _context.getVar(Shell.LANGUAGE);
    if(langue.equals("fr")) {
    
    return "panier";}
    if(langue.equals("es")) {
    return "carro";}
    if(langue.equals("it")) {
    return "carrello";}
    else {
    //default anglais
    return "cart";
    }
    }
    /**
    * renvoie le nom de la commande
    * @return
    */
    @Override
    public String getUsage()
    {
    String langue = (String) _context.getVar(Shell.LANGUAGE);
    if(langue.equals("fr")) {
    
    return "panier";}
    if(langue.equals("es")) {
    return "carro";}
    if(langue.equals("it")) {
    return "carrello";}
    else {
    //default anglais
    return "cart";
    }
    }
    /**
    * renvoie une description de la commande
    * @return
    */
    @Override
    public String getShortDescription()
    {
    String langue = (String) _context.getVar(Shell.LANGUAGE);
    StringBuilder description = new StringBuilder();
    if(langue.equals("fr")){
    description.append("Gestion du caddie\n");
    description.append("\t -ajoute [id du produit] [nombre de produit] .................ajoute le produit dans le caddie\n");
    description.append("\t -enleve [id du produit] .....................................supprime le produit dans le caddie\n");
    description.append("\t -achete [id du compte] ......................................achĂ¨te le contenu du caddie avec le compte\n");
    description.append("\t sans arguments ..............................................liste le contenu du caddie\n");
    }
    if(langue.equals("es")){
    description.append("GestiĂłn de compra\n");
    description.append("\t -anade [id del producto] [nĂşmero de producto] ...............aĂąade el producto a la cesta\n");
    description.append("\t -eliminado [id del producto] ................................elimina el producto en el carro\n");
    description.append("\t -compra [id de la cuenta] ...................................comprar el contenido del carrito con la cuenta\n");
    description.append("\t sin argumentos ..............................................listar el contenido de su carrito\n");
    }
    if(langue.equals("it")){
    description.append("Gestione carrello\n");
    description.append("\t -aggiunge [id del prodotto] [numero di prodotto] ............aggiunge il prodotto al carrello\n");
    description.append("\t -rimosso [id del prodotto] .................................rimuove il prodotto nel carrello\n");
    description.append("\t -comprare [id del conto] ...................................acquistare il contenuto del carrello con l'account\n");
    description.append("\t : senza argomenti ...........................................elencare il contenuto del tuo carrello\n");
    }
    if(langue.equals("en")){
    description.append("Management cart\n");
    description.append("\t -add [id product] [number of product] .......................add the product to the cart\n");
    description.append("\t -remove [id product] .......................................remove the product in the cart\n");
    description.append("\t -buy [id account] ..........................................buy the cart contents with the account\n");
    description.append("\t without arguments ...........................................list the contents of your cart\n");
    }
    return description.toString();
    }
    /**
    * execute la commande
    * @param cmdline
    * @param out
    * @param err
    */
    @Override
    public void execute(String cmdline, PrintStream out, PrintStream err) throws Exception
    {
    EcomCustomerRemote ecomCustomer = (EcomCustomerRemote) _context.getVar("customerEJB");
    StringTokenizer st = new StringTokenizer(cmdline, " ");
    // Ignore cmd
    st.nextToken();
    if(st.countTokens()==0){
    List<ProduitPresentation> products = ecomCustomer.getProduitDuPanier();
    out.println(getFormateList(products));
    }else{
    String cmd = st.nextToken();
    if("-add".equals(cmd)||"-ajoute".equals(cmd)||"-anade".equals(cmd)||"-aggiunge".equals(cmd)){
    if(st.countTokens()==2){
    Integer idProduit=Integer.parseInt(st.nextToken());
    Integer nombre=Integer.parseInt(st.nextToken());
    //ecomCustomer.addProduitInCart(idProduit, nombre);
    }else{
    throw new NumberAttributeException();
    }
    }else{
    if("-remove".equals(cmd)||"-enleve".equals(cmd)||"-eliminado".equals(cmd)||"-rimosso".equals(cmd)){
    if(st.countTokens()==1){
    Integer idProduit=Integer.parseInt(st.nextToken());
    //ecomCustomer.deleteProduitInCart(idProduit);
    }else{
    throw new NumberAttributeException();
    }
    }else{
    if("-buy".equals(cmd)||"-achete".equals(cmd)||"-compra".equals(cmd)||"-comprare".equals(cmd)){
    if(st.countTokens()==1){
    int idCompte = Integer.parseInt(st.nextToken());
    //ecomCustomer.buy(idCompte);
    }else{
    throw new NumberAttributeException();
    }
    }else{
    throw new BadFormateException();
    }
    }
    }
    }
    }
    /**
    * met la liste au bon format de sortie
    * @param listProducts
    * @return
    */
    public String getFormateList(List<ProduitPresentation> listProducts){
    String output = (String) _context.getVar(Shell.OUTPUT);
    String langue = (String) _context.getVar(Shell.LANGUAGE);
    String currency = (String) _context.getVar(Shell.CURRENCY);
    EcomCustomerRemote ecomCustomer = (EcomCustomerRemote) _context.getVar("customerEJB");
    StringBuilder sb=new StringBuilder();
    if(output.equals("TEXT")){
    if(langue.equals("fr")){
    sb.append("liste des produits : \n");
    for (ProduitPresentation product : listProducts) {
    //product.setPrice(ecomCustomer.convertFromEuro(product.getPrix_produit(), currency));
    sb.append(getFormateProduct(product));
    }
    }
    if(langue.equals("es")){
    sb.append("lista de productos : \n");
    for (ProduitPresentation product : listProducts) {
    //product.setPrice(ecomCustomer.convertFromEuro(product.getPrix_produit(), currency));
    sb.append(getFormateProduct(product));
    }
    }
    if(langue.equals("it")){
    sb.append("elenco dei prodotti : \n");
    for (ProduitPresentation product : listProducts) {
    //product.setPrice(ecomCustomer.convertFromEuro(product.getPrix_produit(), currency));
    sb.append(getFormateProduct(product));
    }
    }
    if(langue.equals("en")){
    //default anglais
    sb.append("list of products : \n");
    for (ProduitPresentation product : listProducts) {
    //product.setPrice(ecomCustomer.convertFromEuro(product.getPrix_produit(), currency));
    sb.append(getFormateProduct(product));
    }
    
    }
    }
    if(output.equals("XML")){
    if(langue.equals("fr")){
    sb.append("<produits>\n");
    for (ProduitPresentation product : listProducts) {
    //product.setPrice(ecomCustomer.convertFromEuro(product.getPrix_produit(), currency));
    sb.append(getFormateProduct(product));
    }
    sb.append("</produits>\n");}
    
    if(langue.equals("es")){
    sb.append("<productos>\n");
    for (ProduitPresentation product : listProducts) {
    //product.setPrice(ecomCustomer.convertFromEuro(product.getPrix_produit(), currency));
    sb.append(getFormateProduct(product));
    }
    sb.append("</productos>\n");}
    
    if(langue.equals("it")){
    sb.append("<prodotti>\n");
    for (ProduitPresentation product : listProducts) {
    //product.setPrice(ecomCustomer.convertFromEuro(product.getPrix_produit(), currency));
    sb.append(getFormateProduct(product));
    }
    sb.append("</prodotti>\n");}
    
    if(langue.equals("en")){  
    //default anglais
    sb.append("<products>\n");
    for (ProduitPresentation product : listProducts) {
    //product.setPrice(ecomCustomer.convertFromEuro(product.getPrix_produit(), currency));
    sb.append(getFormateProduct(product));
    }
    sb.append("</products>\n");
    }
    }
    
    if(output.equals("JSON")){
    
        if(langue.equals("fr")){
    sb.append("produits:{\n");
    for (ProduitPresentation product : listProducts) {
    //product.setPrice(ecomCustomer.convertFromEuro(product.getPrix_produit(), currency));
    sb.append(getFormateProduct(product));
    }
    sb.append("}\n");}
    
        if(langue.equals("es")){
    sb.append("productos:{\n");
    for (ProduitPresentation product : listProducts) {
    //product.setPrice(ecomCustomer.convertFromEuro(product.getPrix_produit(), currency));
    sb.append(getFormateProduct(product));
    }
    sb.append("}\n");}
    
        if(langue.equals("it")){
    sb.append("prodotti:{\n");
    for (ProduitPresentation product : listProducts) {
    //product.setPrice(ecomCustomer.convertFromEuro(product.getPrix_produit(), currency));
    sb.append(getFormateProduct(product));
    }
    sb.append("}\n");}
    
        if(langue.equals("en")){
    //default anglais
    sb.append("products:{\n");
    for (ProduitPresentation product : listProducts) {
    //product.setPrice(ecomCustomer.convertFromEuro(product.getPrix_produit(), currency));
    sb.append(getFormateProduct(product));
    }
    sb.append("}\n");}
    }
    
    
    if(output.equals("HTML")){        
    //default HTML
    if(langue.equals("fr")){
    sb.append("<html>\n");
    sb.append("\t<h1>produits</h1>\n");
    sb.append("\t<table>\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th>id</th>\n\t\t\t\t<th>nom</th>\n\t\t\t\t<th>prix</th>\n\t\t\t\t<th>id magasin</th>\n\t\t\t</tr>\n\t\t</thead>\n");
    sb.append("\t\t<tbody>\n");
    for (ProduitPresentation product : listProducts) {
    //product.setPrice(ecomCustomer.convertFromEuro(product.getPrix_produit(), currency));
    sb.append(getFormateProduct(product));
    }
    sb.append("\t\t</tbody>\n");
    sb.append("\t</table>\n");
    sb.append("</html>");}
    
    if(langue.equals("es")){
    sb.append("<html>\n");
    sb.append("\t<h1>productos</h1>\n");
    sb.append("\t<table>\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th>id</th>\n\t\t\t\t<th>nombre</th>\n\t\t\t\t<th>precio</th>\n\t\t\t\t<th>id almacenar</th>\n\t\t\t</tr>\n\t\t</thead>\n");
    sb.append("\t\t<tbody>\n");
    for (ProduitPresentation product : listProducts) {
    //product.setPrice(ecomCustomer.convertFromEuro(product.getPrix_produit(), currency));
    sb.append(getFormateProduct(product));
    }
    sb.append("\t\t</tbody>\n");
    sb.append("\t</table>\n");
    sb.append("</html>");}
    
    if(langue.equals("it")){
    sb.append("<html>\n");
    sb.append("\t<h1>prodotti</h1>\n");
    sb.append("\t<table>\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th>id</th>\n\t\t\t\t<th>nome</th>\n\t\t\t\t<th>prezzo</th>\n\t\t\t\t<th>id memorizzare</th>\n\t\t\t</tr>\n\t\t</thead>\n");
    sb.append("\t\t<tbody>\n");
    for (ProduitPresentation product : listProducts) {
    //product.setPrice(ecomCustomer.convertFromEuro(product.getPrix_produit(), currency));
    sb.append(getFormateProduct(product));
    }
    sb.append("\t\t</tbody>\n");
    sb.append("\t</table>\n");
    sb.append("</html>");}
    
    if(langue.equals("en")){
    //default anglais
    sb.append("<html>\n");
    sb.append("\t<h1>products</h1>\n");
    sb.append("\t<table>\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th>id</th>\n\t\t\t\t<th>name</th>\n\t\t\t\t<th>price</th>\n\t\t\t\t<th>id store</th>\n\t\t\t</tr>\n\t\t</thead>\n");
    sb.append("\t\t<tbody>\n");
    for (ProduitPresentation product : listProducts) {
    //product.setPrice(ecomCustomer.convertFromEuro(product.getPrix_produit(), currency));
    sb.append(getFormateProduct(product));
    }
    sb.append("\t\t</tbody>\n");
    sb.append("\t</table>\n");
    sb.append("</html>");}
    
    }
    
    return sb.toString();
    }
    /**
    * met la product au bon format de sortie
    * @param product
    * @return
    */
    public String getFormateProduct(ProduitPresentation product){
    String output = (String) _context.getVar(Shell.OUTPUT);
    String langue = (String) _context.getVar(Shell.LANGUAGE);
    StringBuilder sb=new StringBuilder();
    if(output.equals("TEXT")) {
    
    sb.append(product.getReference_produit()+" - "+product.getNom_produit()+" - "+product.getPrix_produit()+" - "+product.getReference_store()+"\n");
    }
    
    if(output.equals("XML")) 
    {
        
    if(langue.equals("fr")) {
    
    sb.append("\t<produit>\n");
    sb.append("\t\t<id>"+product.getReference_produit()+"</id>\n");
    sb.append("\t\t<nom>"+product.getNom_produit()+"</nom>\n");
    sb.append("\t\t<prix>"+product.getPrix_produit()+"</prix>\n");
    sb.append("\t\t<id_magasin>"+product.getReference_store()+"</id_magasin>\n");
    sb.append("\t<produit>\n");}
    
    if(langue.equals("es")) {
    sb.append("\t<producto>\n");
    sb.append("\t\t<id>"+product.getReference_produit()+"</id>\n");
    sb.append("\t\t<nombre>"+product.getNom_produit()+"</nombre>\n");
    sb.append("\t\t<precio>"+product.getPrix_produit()+"</precio>\n");
    sb.append("\t\t<id_almacenar>"+product.getReference_store()+"</id_almacenar>\n");
    sb.append("\t<producto>\n");}
    
    if(langue.equals("it")) {
    sb.append("\t<prodotto>\n");
    sb.append("\t\t<id>"+product.getReference_produit()+"</id>\n");
    sb.append("\t\t<nome>"+product.getNom_produit()+"</nome>\n");
    sb.append("\t\t<prezzo>"+product.getPrix_produit()+"</prezzo>\n");
    sb.append("\t\t<id_memorizzare>"+product.getReference_store()+"</id_memorizzare>\n");
    sb.append("\t<prodotto>\n");}
    
    if(langue.equals("en")) {
    //default anglais
    sb.append("\t<product>\n");
    sb.append("\t\t<id>"+product.getReference_produit()+"</id>\n");
    sb.append("\t\t<name>"+product.getNom_produit()+"</name>\n");
    sb.append("\t\t<price>"+product.getPrix_produit()+"</price>\n");
    sb.append("\t\t<id_store>"+product.getReference_store()+"</id_store>\n");
    sb.append("\t<product>\n");}
    }
    if(output.equals("JSON")){
    if(langue.equals("fr")) {
    
    sb.append("\tproduit:{\n");
    sb.append("\t\tid:"+product.getReference_produit()+",\n");
    sb.append("\t\tnom:\""+product.getNom_produit()+"\",\n");
    sb.append("\t\tprix:"+product.getPrix_produit()+"\n");
    sb.append("\t\tid_magasin:"+product.getReference_store()+"\n");
    sb.append("\t},\n");}
    
    if(langue.equals("es")){
    sb.append("\tproducto:{\n");
    sb.append("\t\tid:"+product.getReference_produit()+",\n");
    sb.append("\t\tnombre:\""+product.getNom_produit()+"\",\n");
    sb.append("\t\tprecio:"+product.getPrix_produit()+"\n");
    sb.append("\t\tid_almacenar:"+product.getReference_store()+"\n");
    sb.append("\t},\n");}
    
    if(langue.equals("it")){
    sb.append("\tprodotto:{\n");
    sb.append("\t\tid:"+product.getReference_produit()+",\n");
    sb.append("\t\tnome:\""+product.getNom_produit()+"\",\n");
    sb.append("\t\tprezzo:"+product.getPrix_produit()+"\n");
    sb.append("\t\tid_memorizzare:"+product.getReference_store()+"\n");
    sb.append("\t},\n");}
    
    if(langue.equals("en")){
    //default anglais
    sb.append("\tproduct:{\n");
    sb.append("\t\tid:"+product.getReference_produit()+",\n");
    sb.append("\t\tname:\""+product.getNom_produit()+"\",\n");
    sb.append("\t\tprice:"+product.getPrix_produit()+"\n");
    sb.append("\t\tid_store:"+product.getReference_store()+"\n");
    sb.append("\t},\n");
    
    }}
    if(output.equals("HTML")){
    //default HTML
    sb.append("\t\t\t<tr>\n");
    sb.append("\t\t\t\t<td>"+product.getReference_produit()+"</td>\n");
    sb.append("\t\t\t\t<td>"+product.getNom_produit()+"</td>\n");
    sb.append("\t\t\t\t<td>"+product.getPrix_produit()+"</td>\n");
    sb.append("\t\t\t\t<td>"+product.getReference_store()+"</td>\n");
    sb.append("\t\t\t</tr>");
    }
    return sb.toString();
    }
    } 
